//
//  UITextField+Placeholer.m
//  BuDeJie
//
//  Created by Guo Rui on 2017/9/21.
//  Copyright © 2017年 GR Harry. All rights reserved.
//

#import "UITextField+Placeholer.h"
#import <objc/message.h>

static NSString * const kUITextFieldPlaceholderKey = @"cn.timeface.budejie.uitextfield.placeholder";

@implementation UITextField (Placeholer)
+ (void)load
{
    /**
     问题：
     由于 UITextField 的 placeholderLabel 是懒加载。在setPalceholder：方法的时候才会被创建。所以，如果先设置placeholderColor，再设置placeholder会没有效果。
     即：
     textField.placeholderColor = [UIColor redColor];
     textField.placeholder = @"请输入手机号";
     
     解决思路：
     将placeholderColor先存起来，然后在setPlaceholder:中调用[super setPlaceholder:]后再设置placeholderColor.但，这里是分类，所以用runtime的方法交换来
     向setPlaceholder:方法中添加代码
     */
    Method setPlaceholderMethod = class_getInstanceMethod(self, @selector(setPlaceholder:));
    Method setBJD_placeholderMethod = class_getInstanceMethod(self, @selector(setBJD_placeholder:));
    method_exchangeImplementations(setPlaceholderMethod, setBJD_placeholderMethod);
}


- (void)setBJD_placeholder:(NSString *)placeholder
{
    [self setBJD_placeholder:placeholder];
    self.placeholderColor = self.placeholderColor;
}

- (void)setPlaceholderColor:(UIColor *)placeholderColor
{
    objc_setAssociatedObject(self, &kUITextFieldPlaceholderKey, placeholderColor, OBJC_ASSOCIATION_RETAIN);
    
    /**
     虽然设置placeholder的颜色可以使用attributedPlaceholder这个属性去设置，但是使用起来比较麻烦。
     所以考虑有没有什么更简单的方法去设置，想到显示placeholder的控件可能是label，于是断点验证，找到私有属性placeholderLabel。
     所以就可以用kvc获取该对象，并设置颜色了。
     */
    UILabel *placeholderLabel = [self valueForKey:@"placeholderLabel"];
    placeholderLabel.textColor = placeholderColor;
}

- (UIColor *)placeholderColor
{
  return objc_getAssociatedObject(self, &kUITextFieldPlaceholderKey);
}



@end
